﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Grafica.ClienteWS;

namespace Grafica
{
    public partial class ABMProveedor : Form
    {
         private static ABMProveedor InstanciaFormulario = null;

         public ABMProveedor()
        {
            InitializeComponent();
            CargarProveedores();
        }

         public static ABMProveedor Instance()
        {
            if (InstanciaFormulario == null)
            {
                InstanciaFormulario = new ABMProveedor();
            }
            return InstanciaFormulario;
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);

            InstanciaFormulario = null;
        }

        private void buttonAgregar_Click(object sender, EventArgs e)
        {
            #region Validacion de campos

            //valido el nombre
            if (string.IsNullOrEmpty(textBoxNombre.Text))
            {
                errorProvider1.SetError(textBoxNombre, "Debe ingresar el nombre.");
            }
            else
            {
                errorProvider1.SetError(textBoxNombre, String.Empty);
            }

            //valido el rut
            if (string.IsNullOrEmpty(textBoxRut.Text))
            {
                errorProvider1.SetError(textBoxRut, "Debe ingresar el rut.");
            }
            else
            {
                errorProvider1.SetError(textBoxRut, String.Empty);
            }

            //valido el telefono
            if (string.IsNullOrEmpty(textBoxTelefono.Text))
            {
                errorProvider1.SetError(textBoxTelefono, "Debe ingresar el teléfono.");
            }
            else
            {
                errorProvider1.SetError(textBoxTelefono, String.Empty);
            }

            #endregion

                if (!string.IsNullOrEmpty(textBoxRut.Text))
                {
                    EtaxiSoapClient ws = new EtaxiSoapClient();
                    DataProveedor dataProveedor = new DataProveedor();

                    dataProveedor.Nombre = textBoxNombre.Text;
                    dataProveedor.Rut = textBoxRut.Text;
                    dataProveedor.Telefono = Convert.ToInt32(textBoxTelefono.Text);
                    dataProveedor.Direccion = textBoxDireccion.Text;

                    if (!ws.AltaProveedor(dataProveedor))
                    {
                        MessageBox.Show("Ya existe el proveedor.", "Error al ingresar el proveedor.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                    else
                    {
                        MessageBox.Show("Se ha ingresado correctamente el proveedor.", "Proveedor ingresado", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                        dataGridViewProveedor.Rows.Clear();
                        CargarProveedores();
                        LimpiarDatos();
                        textBoxRut.Enabled = true;
                    }
                }

        }

        private void textBoxRut_KeyPress(object sender, KeyPressEventArgs e)
        {
            ValidarLetrasNumeros.ControlarNumeros(e);
        }

        private void textBoxTelefono_KeyPress(object sender, KeyPressEventArgs e)
        {
            ValidarLetrasNumeros.ControlarNumeros(e);
        }

        private void CargarProveedores()
        {
            EtaxiSoapClient ws = new EtaxiSoapClient();
            DataProveedor[] proveedores = ws.ListarProveedores();

            foreach (DataProveedor proveedor in proveedores)
            {
                this.dataGridViewProveedor.Rows.Add(proveedor.Nombre, proveedor.Rut, proveedor.Telefono, proveedor.Direccion);
            }
        }

        private void LimpiarDatos()
        {
            textBoxNombre.Clear();
            textBoxRut.Clear();
            textBoxTelefono.Clear();
            textBoxDireccion.Clear();
        }

        private void buttonEliminar_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(textBoxRut.Text))
            {
                errorProvider1.SetError(textBoxNombre, "Seleccione de la grilla el proveedor que desea eliminar.");
            }
            else
            {
                errorProvider1.SetError(textBoxRut, String.Empty);

                EtaxiSoapClient ws = new EtaxiSoapClient();
                DataProveedor dataProveedor = new DataProveedor();
                dataProveedor.Rut = textBoxRut.Text;

                if (!ws.BajaProveedor(dataProveedor))
                {
                    MessageBox.Show("No se ha podido eliminar el proveedor.", "Error al eliminar proveedor.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
                else
                {
                    MessageBox.Show("Se ha eliminado el proveedor.", "Se ha eliminado el proveedor correctamente.", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    dataGridViewProveedor.Rows.Clear();
                    CargarProveedores();
                    LimpiarDatos();
                    textBoxRut.Enabled = true;
                }
            }
        }

        private void buttonModificar_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(textBoxNombre.Text) || !string.IsNullOrEmpty(textBoxRut.Text) || !string.IsNullOrEmpty(textBoxTelefono.Text))
            {
                EtaxiSoapClient ws = new EtaxiSoapClient();
                DataProveedor dataProveedor = new DataProveedor();
                dataProveedor.Nombre = textBoxNombre.Text;
                dataProveedor.Rut = textBoxRut.Text;
                dataProveedor.Telefono = Convert.ToInt32(textBoxTelefono.Text);
                dataProveedor.Direccion = textBoxDireccion.Text;

                if (!ws.ModificarProveedor(dataProveedor))
                {
                    MessageBox.Show("No se ha podido modificar el proveedor.", "Error al modificar proveedor.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
                else
                {
                    MessageBox.Show("Se ha modificado el proveedor.", "Proveedor modificado correctamente.", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    dataGridViewProveedor.Rows.Clear();
                    CargarProveedores();
                    LimpiarDatos();
                    textBoxRut.Enabled = true;
                }

            }        
        }

        private void buttonSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void dataGridViewProveedor_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            LimpiarDatos();

            int nroFila = this.dataGridViewProveedor.CurrentCell.RowIndex;
            textBoxNombre.AppendText(this.dataGridViewProveedor.Rows[nroFila].Cells[0].Value.ToString());
            textBoxRut.AppendText(this.dataGridViewProveedor.Rows[nroFila].Cells[1].Value.ToString());
            textBoxTelefono.AppendText(this.dataGridViewProveedor.Rows[nroFila].Cells[2].Value.ToString());
            textBoxDireccion.AppendText(this.dataGridViewProveedor.Rows[nroFila].Cells[3].Value.ToString());

            textBoxRut.Enabled = false;
        }
    }
}
